///PHILOTES Source Code.  (C)2012 PhiloLabs
#pragma once

#ifndef __Lod_Strategy_Manager_H__
#define __Lod_Strategy_Manager_H__

#include "OgrePrerequisites.h"

#include "OgreLodStrategy.h"
#include "OgreSingleton.h"
#include "OgreIteratorWrappers.h"

namespace Ogre {

    class _OgreExport LodStrategyManager : public Singleton<LodStrategyManager>, public MemAlloc_SceneCtrl
    {
        
        typedef map<String, LodStrategy *>::type StrategyMap;

        StrategyMap mStrategies;

        LodStrategy *mDefaultStrategy;

    public:
        
        LodStrategyManager();

        
        ~LodStrategyManager();

        
        void addStrategy(LodStrategy *strategy);

        
        LodStrategy *removeStrategy(const String& name);

        
        void removeAllStrategies();

        
        LodStrategy *getStrategy(const String& name);

        
        void setDefaultStrategy(LodStrategy *strategy);

        
        void setDefaultStrategy(const String& name);

        
        LodStrategy *getDefaultStrategy();

        
        MapIterator<StrategyMap> getIterator();

        
        static LodStrategyManager& getSingleton(void);
        
        static LodStrategyManager* getSingletonPtr(void);
    };
	
	
}

#endif
